#include <iostream>

class Louis
{
public:
    enum Level
    {
        levelDebug = 0,
        levelInfo,
        levelWarn,
        levelError,
        levelFatal
    };

private:
    Level m_logLevel = levelInfo;

public:
    void SetLevel(Level level) 
    {
        m_logLevel = level;
    }
    void Debug(const char* message)
    {
        if (m_logLevel >= levelDebug) {
            std::cout << "[DEBUG]: " << message << std::endl;
        }
    }
    void Info(const char* message)
    {
        if (m_logLevel >= levelInfo) {
            std::cout << "[INFO]: " << message << std::endl;
        }
    }
    void Warn(const char* message)
    {
        if (m_logLevel >= levelWarn) {
            std::cout << "[WARNING]: " << message << std::endl;
        }
    }
    void Error(const char* message)
    {
        if (m_logLevel >= levelError) {
            std::cout << "[ERROR]: " << message << std::endl;
        }
    }
    void Fatal(const char* message)
    {
        if (m_logLevel >= levelFatal) {
            std::cout << "[FATAL]: " << message << std::endl;
        }
    }
};

int main() 
{ 
    Louis log;
    log.SetLevel(Louis::levelWarn);
    log.Debug("Hello");
    log.Info("Hello");
    log.Warn("Hello");
    log.Error("Hello");
    log.Fatal("Hello");
}